const cloud = require('wx-server-sdk');
const axios = require('axios'); // 用于发送 HTTP 请求到服务器

// 初始化云环境（添加调试日志）
console.log('开始初始化云环境...');
cloud.init({
  env: 'lvtengweishi-4gvg0d2h59537d91' // 替换为你的云环境 ID
});
console.log('云环境初始化完成');

exports.main = async (event, context) => {
  console.log('---------- 云函数开始执行 ----------');
  console.log('接收的event参数:', JSON.stringify(event, null, 2)); // 打印完整输入参数
  console.log('接收的context信息:', {
    appId: context.appId,
    openId: context.openId,
    env: context.env
  }); // 打印上下文关键信息

  // 提取fileID并校验
  const { fileID } = event;
  console.log('提取到的fileID:', fileID);
  if (!fileID) {
    const errMsg = '缺少 fileID 参数';
    console.error('错误:', errMsg);
    return { error: errMsg };
  }

  try {
    // 1. 通过 fileID 获取图片的临时访问 URL
    console.log('===== 开始获取临时URL =====');
    console.log('调用cloud.getTempFileURL，fileID:', fileID);
    const tempUrlResult = await cloud.getTempFileURL({
      fileList: [fileID], // 传入 fileID 列表
    });
    console.log('cloud.getTempFileURL返回结果:', JSON.stringify(tempUrlResult, null, 2)); // 打印完整返回

    // 检查临时 URL 是否获取成功
    if (!tempUrlResult || !tempUrlResult.fileList || tempUrlResult.fileList.length === 0) {
      throw new Error('getTempFileURL返回空的fileList');
    }
    const tempFileInfo = tempUrlResult.fileList[0];
    if (!tempFileInfo.tempFileURL) {
      throw new Error(`获取临时URL失败，错误信息: ${tempFileInfo.errMsg || '未知错误'}`);
    }
    const imageUrl = tempFileInfo.tempFileURL;
    console.log('成功获取临时URL:', imageUrl);
    console.log('临时URL有效期:', tempFileInfo.maxAge || '默认4小时'); // 打印URL有效期

    // 2. 将临时 URL 发送到服务器的 Python 识别接口
    console.log('===== 开始调用服务器接口 =====');
    const serverUrl = 'http://82.157.209.238:26094/analyze';
    console.log('服务器接口地址:', serverUrl);
    console.log('发送的请求参数:', { image_url: imageUrl });

    const serverResponse = await axios.post(
      serverUrl,
      { image_url: imageUrl },
      { 
        timeout: 30000,
        headers: { 'Content-Type': 'application/json' } // 显式指定JSON格式
      }
    );

    console.log('服务器接口返回状态码:', serverResponse.status);
    console.log('服务器接口返回数据:', JSON.stringify(serverResponse.data, null, 2)); // 打印完整响应

    // 3. 返回服务器的识别结果
    console.log('===== 云函数执行成功 =====');
    return {
      success: true,
      result: serverResponse.data,
      requestId: context.requestId
    };

  } catch (err) {
    console.error('===== 云函数执行出错 =====');
    console.error('错误类型:', err.name);
    console.error('错误消息:', err.message);
    console.error('错误堆栈:', err.stack);
    // 针对axios错误的详细打印
    if (err.isAxiosError) {
      console.error('Axios错误详情:', {
        config: err.config,
        response: err.response ? {
          status: err.response.status,
          data: err.response.data,
          headers: err.response.headers
        } : '无响应'
      });
    }
    return {
      error: err.message,
      stack: process.env.NODE_ENV === 'development' ? err.stack : undefined, // 生产环境隐藏堆栈
      requestId: context.requestId
    };
  } finally {
    console.log('---------- 云函数执行结束 ----------');
  }
};